정적 프로그램 분석
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
정적 프로그램 분석은 소프트웨어의 신뢰성 및 안전성을 높이기 위해 소스 코드를 실행하지 않고 분석하는 기술이다. 소프트웨어 개발 초기 단계에서 잠재적인 오류나 보안 취약점을 발견하여 수정 비용을 절감하고 품질을 향상시키는 데 기여한다. 정적 분석은 다양한 수준으로 수행되며, 유닛 레벨, 기술 레벨, 시스템 레벨, 미션/비즈니스 수준으로 분류된다. 정형 방법론, 데이터 기반 분석, 자동 해결 등 다양한 기술과 도구가 존재하며, 의료 소프트웨어, 원자력 소프트웨어, 항공 소프트웨어 등 신뢰성이 중요한 분야에서 널리 활용된다.
더 읽어볼만한 페이지
- 품질 보증 - 소프트웨어 품질보증
소프트웨어 품질 보증(SQA)은 소프트웨어 개발 과정 전반의 품질 확보를 위한 활동으로, 정책 및 절차 준수, 분석, 설계, 테스트 등의 활동을 포함하며, ISO/IEC/IEEE 90003:2018과 같은 표준 준수 및 변경 제어 위원회 운영을 통해 품질을 관리한다. - 정적 프로그램 분석 - 호어 논리
호어 논리는 프로그램의 실행 전후 조건을 명시하고 코드 조각이 조건을 어떻게 변화시키는지 추론하는 규칙을 제공하여 프로그램의 정확성을 형식적으로 검증하는 논리 시스템이다. - 정적 프로그램 분석 - Perl::Critic
Perl::Critic은 Perl 코드의 품질, 스타일, 오류를 검사하여 더 나은 코드를 작성하도록 돕는 정적 분석 도구이다. - 소프트웨어 리뷰 - 코드 검토
코드 검토는 작성된 코드의 품질 향상과 오류 감소를 위해 수행되는 검토 방식이며, 오류 제거, 디버깅, 유지보수, 기능 개선에 효과적이고 소프트웨어의 진화 가능성과 유지보수성에 영향을 미친다. - 소프트웨어 리뷰 - 페어 프로그래밍
페어 프로그래밍은 두 명의 프로그래머가 한 컴퓨터로 코드를 함께 작성하며, 드라이버와 네비게이터 역할을 번갈아 수행하여 지식 공유, 실시간 코드 검토, 문제 해결 능력 향상 등의 이점을 제공하는 소프트웨어 개발 방법이다.
정적 프로그램 분석 | |
---|---|
개요 | |
![]() | |
유형 | 소프트웨어 분석 |
분야 | 소프트웨어 공학 |
목적 | 소프트웨어 결함 찾기 |
상세 정보 | |
설명 | 실행 없이 컴퓨터 프로그램 분석 |
방법 | 컴퓨터 과학 수학 소프트웨어 공학 |
2. 정적 분석의 이유
소프트웨어 메트릭과 리버스 엔지니어링은 정적 분석의 한 형태로 묘사될 수 있다. 특히 임베디드 시스템에서 소프트웨어 메트릭을 끌어내는 것과 정적 분석은 소프트웨어 품질 목표를 정의함으로써 점점 서로를 효율적으로 사용하게 된다.[34]
시스템에서 사용되는 소프트웨어의 속성들을 검사하고 잠재적인 취약한 코드의 위치를 찾는 것은 정적 분석의 상업적 사용으로서 점차 증가하고 있다.[35] 예를 들어 아래와 같은 산업들은 정적 코드 분석의 사용을 통해 점점 정교하고 복잡해지는 소프트웨어의 질적 향상이라는 인식을 하고 있다.
산업 | 내용 |
---|---|
의료 소프트웨어 | 미국 식품의약국(FDA)은 의료 기기에 대한 정적 분석의 사용을 확인했다.[6] |
원자력 관련 소프트웨어 | 영국에서는 원자력 규제청(ONR)이 원자로 보호 시스템에 대한 정적 분석의 사용을 권장한다.[7] |
항공 소프트웨어 | 동적 분석과 결합하여 사용된다.[8] |
자동차 및 기계 | 기능 안전 기능은 각 자동차 제품 개발 단계의 필수적인 부분이다 (ISO 26262, 섹션 8). |
객체 관리 그룹(OMG)은 소프트웨어 품질 측정 및 평가에 필요한 소프트웨어 분석 유형에 관한 연구를 발표했다. "CISQ 권고에 따라 복원력 있고 안전하며 효율적이며 쉽게 변경 가능한 IT 시스템을 제공하는 방법"이라는 문서에서는 소프트웨어 분석을 세 가지 수준으로 설명한다.[40][13]
VDC Research는 2012년 28.7%의 임베디드 소프트웨어 엔지니어들이 현재 정적 분석 툴을 사용하고 있으며, 2년 안에 39.7%가 사용할 것이라고 분석했다.[36] 2010년에는 유럽 리서치 프로젝트에서 인터뷰에 응한 60%의 개발자들이 적어도 자신의 기본 IDE에 내장된 정적 분석기를 사용한다고 조사되었다. 그러나 단지 10%의 직원들만이 추가적인 분석 툴을 사용하였다.[37]
또한 응용 프로그램 보안 산업에서 정적 애플리케이션 보안 테스트(SAST)가 사용되고 있다. SAST는 Microsoft에서 정의한 SDL과 같은 보안 개발 수명 주기(SDL)의 중요한 부분이며,[38] 소프트웨어 회사에서 흔히 사용되는 관행이다.[39]
3. 정적 분석 툴의 종류
추가적인 수준의 소프트웨어 분석을 정의할 수 있다.
사전 컴파일러(AOT 컴파일러)는 언어 사양에는 부합하지만 로직의 정당성이 의심스러운 코드나, 미정의 동작을 일으킬 수 있는 코드를 감지하여 경고를 내보내는 경우가 대부분이다. 다만, 컴파일러로는 다루기 어려운 사항도 있기 때문에, 독립된 정적 코드 분석 전용 툴을 보조적으로 병용하는 경우도 많다. 통합 개발 환경에 표준 탑재되어 있는 것도 있고, 플러그인이나 애드온으로 개발자가 추가할 수 있도록 되어 있는 것도 있다. 코드 편집기에서 문제가 있는 부분을 강조 표시하는 등, 소스 코드를 컴파일하지 않고 실시간으로 지적해 주는 것도 있다.
4. 정적 분석의 활용 분야
정적 분석은 다양한 산업 분야에서 활용되며, 특히 안전이 매우 중요한 시스템에서 그 중요성이 강조된다.
5. 정형 방법론
정형 방법론은 엄격한 수학적 방법을 사용하여 소프트웨어의 정확성을 검증하는 방법이다. 정지 문제에 대한 간단한 축약으로, 임의의 프로그램에서 모든 가능한 런타임 에러를 찾는 것은 결정 불가능하다고 증명될 수 있다. (임의의 프로그램이 런타임 에러를 보이든지 아니든지 항상 정확한 답을 하는 수학적 방법론은 존재하지 않는다.) 이 결과는 쿠르트 괴델이나 앨런 튜링의 연구에서부터 시작된다.[41] 많은 결정 불가능한 질문 중에서 유용한 근사해를 얻는 시도는 가능하다.
정형 정적 분석의 구현 기술에는 다음이 포함된다.[41]
6. 데이터 기반 정적 분석
데이터 기반 정적 분석은 광범위한 코드베이스를 활용하여 코딩 규칙을 추론하고 분석의 정확성을 향상시킨다.[16][17] 예를 들어, 깃허브에서 사용 가능한 모든 Java 오픈 소스 패키지를 사용하여 훌륭한 분석 전략을 학습할 수 있다. 규칙 추론에는 기계 학습 기법을 사용할 수 있다.[18] 또한, 과거의 많은 수정 사항과 경고로부터 학습하는 것도 가능하다.[16]
7. 자동 해결
정적 분석기는 경고를 생성한다. 특정 유형의 경고에 대해서는 자동화된 해결 기술을 설계하고 구현하는 것이 가능하다. 예를 들어, Logozzo와 Ball은 C# ''cccheck''에 대한 자동화된 해결 방안을 제안했다.[19]
8. 정적 코드 분석 도구
다양한 프로그래밍 언어에 대한 정적 코드 분석 도구들이 존재한다.
언어 | 도구 | 라이선스 | 비고 |
---|---|---|---|
C, C++ | [http://www.hitachi-solutions.co.jp/anywarp_codedirectorforc/ anyWarp CodeDirector for C/C++] | 상용 | 히타치 솔루션즈 |
C, C++ | [http://mtc.epfl.ch/software-tools/blast/ BLAST] | Apache License | → CPA 체커 |
C++ | Parasoft [https://www.parasoft.com/product/cpptest/ C++test] | 상용 | Parasoft |
C | [http://www.mario-konrad.ch/index.php?page=14003 C99parser] | GPL | |
C | [http://manju.cs.berkeley.edu/ccured/ CCured] | BSD 라이선스 | 일부 동적 분석 |
C, C++ | [https://www.ubiquitous-ai.com/products/codesonar/ CodeSonar] | 상용 | |
C, C++ | [https://www.synopsys.com/ja-jp/software-integrity/security-testing/static-analysis-sast.html Coverity] | 상용 | |
C, C++ | [http://sourceforge.net/projects/cppcheck/ cppcheck] | GPL | |
C | [http://www.cs.umd.edu/~jfoster/cqual/ Cqual] | GPL | |
C | [http://www.spinellis.gr/cscout CScout] | 소스 코드 분석 및 리팩토링 브라우저. 프리프로세서의 구문도 처리. | |
C, C++ | [http://iwi-cxsuite.com/ Checkmarx CxSuite] | 상용 | 컴파일 불필요. 소스 코드만으로 분석 가능. |
C | [http://www.dwheeler.com/flawfinder/ Flawfinder] | GPL | |
C, C++ | [http://www.redlizards.com Goanna] | 상용 | |
C, C++ | Fortify SCA [28] | 상용 | |
C | [http://introspector.sourceforge.net/ introspector] | GPL | C언어용이지만, 다른 언어에도 대응 중. |
C, C++ | Klocwork [http://www.klocwork.com/jp/ Insight] | 상용 | |
C, C++ | [http://www.ldra.com/en/software-quality-test-tools/group/by-product-module/ldra-tool-suite LDRA] | 상용 | MISRA 주요 멤버 |
C | [http://www.cs.berkeley.edu/~daw/mops/ MOPS] | BSD풍 라이선스 | |
C++ | [http://opencxx.sourceforge.net/ OpenC++] | ||
C, C++ | [http://www.programmingresearch.com/QAC_MAIN.html QAC], [http://www.programmingresearch.com/QACPP_MAIN.html QAC++] | 상용 | |
C, C++ | 후지쯔 소프트웨어 [http://jp.fujitsu.com/group/fst/services/pgr/ PGRelief C/C++] | 상용 | |
C, C++ | [http://pmd.sourceforge.net/cpd.html PMD's Copy/Paste Detector] | BSD풍 라이선스 | |
C, C++ | [http://jp.mathworks.com/discovery/static-code-analysis.html PolySpace] | 상용 | |
C, C++ | [http://www.microsoft.com/whdc/devtools/tools/PREfast.mspx PREfast] | Windows용 장치 드라이버를 개발하는 데 사용하는 WDK의 일부 | |
C, C++ | [http://www.tokyo-densan.co.jp/product/ads/Review-C.html Review-C] | 상용 | |
C | [http://smatch.sourceforge.net/ Smatch] | C언어 소스 체커. 주로 리눅스 커널용. | |
C | [https://sparse.wiki.kernel.org/index.php/Main_Page Sparse] | GPL | |
C | [http://www.cs.utah.edu/~regehr/stacktool/ Stacktool] | ||
C | [http://splint.org/ Splint] | GPL | |
C, C++ | Visual Studio[29] | ||
C, C++ | [http://clang-analyzer.llvm.org/ Clang Static Analyzer] | BSD풍 라이선스 | |
C, C++ | Clang-Tidy[30] | ||
C | [http://adlint.sourceforge.net/ AdLint] | GPL | |
자바 | Klocwork Insight, Visual Studio, [https://www.synopsys.com/ja-jp/software-integrity/security-testing/static-analysis-sast.html Coverity], Checkmarx CxSuite, [http://sourceforge.net/projects/devadvantage DevMetrics and DevAdvantage], [https://juliasoft.com/julia-analyzer/ Julia], Parasoft [http://www.parasoft.co.jp/jsp/ja/products/dottest.jsp dotTEST], Fortify SCA [28], 사이터, [http://www.dsm.fordham.edu/~ftnchek/ FTNCHEK], W3C [http://validator.w3.org/ 마크업 유효성 검사 서비스], [https://www.sonarqube.org/ SonarQube], [http://www.garret.ru/~knizhnik/jlint/ReadMe.htm AntiC], anyWarp CodeDirector, [http://checkstyle.sourceforge.net/ Checkstyle], [http://cobertura.sourceforge.net/ Cobertura], [http://secure.ucd.ie/products/opensource/ESCJava2/ ESC/Java2], [http://findbugs.sourceforge.net/ FindBugs], [http://www.hammurapi.com/dokuwiki/doku.php Hammurapi], 오라클 [http://www.oracle.com/technology/products/jdev JDeveloper], [http://pmd.sourceforge.net/ PMD], RIPS, [http://spoon.gforge.inria.fr Spoon], [http://wala.sourceforge.net/ WALA], 후지쯔 소프트웨어 [http://jp.fujitsu.com/group/fst/services/pgr-java/ PGRelief J], Parasoft [http://www.parasoft.co.jp/jsp/ja/products/jtest.jsp Jtest], IntelliJ IDEA | Cobertura는 단위 테스트 코드 커버리지를 자동 계산 | |
C# | [https://www.synopsys.com/ja-jp/software-integrity/security-testing/static-analysis-sast.html Coverity], Checkmarx CxSuite, Fortify SCA[28], [https://juliasoft.com/julia-analyzer/ Julia] | ||
안드로이드 | 안드로이드 스튜디오 | ||
펄 | Checkmarx CxSuite, [http://search.cpan.org/dist/fluff/ fluff], [http://search.cpan.org/dist/Perl-Critic/ Perl::Critic] | ||
PHP | PHP, 사이터(Sider), Checkmarx CxSuite, [http://pmd.sourceforge.net/cpd.html PMD의 복사/붙여넣기 감지기], RIPS, Fortify SCA[28], PhpMetrics[31], [https://www.sonarqube.org/ SonarQube] | -l 옵션을 붙여 실행하면 Lint와 유사한 기본적인 검사를 수행한다. | |
파이썬 | 사이터, 포티파이 SCA[28], [http://pychecker.sourceforge.net/ PyChecker], [http://divmod.org/trac/ Pyflakes], [http://www.logilab.org/projects/pylint PyLint], [https://www.sonarqube.org/ SonarQube] | ||
.NET | Checkmarx CxSuite, Fortify SCA[28], RIPS | ||
VB.NET | Checkmarx CxSuite, Fortify SCA[28], Parasoft dotTEST, Visual Studio, [https://www.sonarqube.org/ SonarQube] | ||
ASP.NET | Checkmarx CxSuite, Fortify SCA[28] | ||
ABAP | Fortify SCA[28] | ||
ActionScript | Fortify SCA[28] | ||
Apex | Fortify SCA[28] | ||
COBOL | Fortify SCA[28] | ||
루비 | 사이터(Sider), Checkmarx CxSuite, Fortify SCA[28] | ||
자바스크립트 | Parasoft [http://www.parasoft.co.jp/jsp/ja/products/webtest.jsp WebTest], [https://www.sonarqube.org/ SonarQube], ESLint[32], Checkmarx CxSuite, Fortify SCA[28] | ||
XML | [Fortify SCA](https://ja.wikipedia.org/wiki/Fortify_SCA), [http://wiki.eclipse.org/index.php/Introduction_to_the_WSDL_Editor WSDL 유효성 검사기], Parasoft [http://www.parasoft.co.jp/jsp/ja/products/soatest.jsp SOAtest], 사이다, Checkmarx CxSuite, SonarQube(https://www.sonarqube.org/) | 이클립스 | |
여러 언어 지원 | Checkmarx CxSuite, SonarQube |
참조
[1]
학술지
Industrial Perspective on Static Analysis.
http://www.ida.liu.s[...]
1995-03
[2]
학술지
A survey on automated dynamic malware-analysis techniques and tools
https://doi.org/10.1[...]
2008-03-05
[3]
학술지
Just enough semantics: An information theoretic approach for IR-based software bug localization
https://linkinghub.e[...]
2018-01-01
[4]
간행물
Software Quality Objectives for Source Code
http://web1.see.asso[...]
2010
[5]
간행물
Improving Software Security with Precise Static and Runtime Analysis
http://research.micr[...]
Benjamin Livshits
2006
[6]
웹사이트
Infusion Pump Software Safety Research at FDA
https://www.fda.gov/[...]
Food and Drug Administration
2010-09-08
[7]
웹사이트
Computer based safety systems
http://www.hse.gov.u[...]
2013-05-15
[8]
간행물
Position Paper CAST-9. Considerations for Evaluating Safety Engineering Approaches to Software Assurance
http://www.faa.gov/a[...]
FAA, Certification Authorities Software Team (CAST)
2002-01
[9]
웹사이트
Automated Defect Prevention for Embedded Software Quality
http://alm.parasoft.[...]
VDC Research
2012-04-10
[10]
논문
Empirical study of tool support in highly distributed research projects
https://ieeexplore.i[...]
IEEE
2010
[11]
서적
The Security Development Lifecycle: SDL: A Process for Developing Demonstrably More Secure Software
Microsoft Press
2006
[12]
간행물
Deploying Static Application Security Testing on a Large Scale
https://www.brucker.[...]
2014
[13]
웹사이트
OMG Whitepaper | CISQ - Consortium for Information & Software Quality
http://www.omg.org/C[...]
2013-10-18
[14]
웹사이트
A Survey of Automated Techniques for Formal Software Verification
http://www.kroening.[...]
Transactions On CAD
2015-05-11
[15]
웹사이트
A Formal Methods-based verification approach to medical device software analysis
http://embeddeddsp.e[...]
Embedded Systems Design
2010-09-09
[16]
웹사이트
Learning from other's mistakes: Data-driven code analysis.
https://www.slidesha[...]
2015-04-13
[17]
서적
Evaluation and Assessment in Software Engineering
Association for Computing Machinery
2021-06-21
[18]
서적
Proceedings of the 2015 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications - OOPSLA 2015
https://ora.ox.ac.uk[...]
[19]
학술지
Modular and verified automatic program repair
http://dx.doi.org/10[...]
2012-11-15
[20]
문서
Industrial Perspective on Static Analysis
1995-03
[21]
문서
静的コード分析ツールと IBM Rational Team Concert との統合 - IBM Documentation
https://www.ibm.com/[...]
[22]
문서
Software Quality Objectives for Source Code
http://web1.see.asso[...]
[23]
문서
Improving Software Security with Precise Static and Runtime Analysis
http://research.micr[...]
2006
[24]
웹사이트
Infusion Pump Software Safety Research at FDA
http://www.fda.gov/M[...]
Food and Drug Administration
2010-09-09
[25]
문서
Computer based safety systems
http://www.hse.gov.u[...]
[26]
웹사이트
Automated Defect Prevention for Embedded Software Quality
http://blog.parasoft[...]
VDC Research
2012-04-10
[27]
웹사이트
A Formal Methods-based verification approach to medical device software analysis
http://embeddeddsp.e[...]
Embedded Systems Design
2010-09-09
[28]
문서
多言語(17)混在のシステムでの横断的解析が可能
[29]
문서
C/C++ code analyzers | Microsoft Learn
https://learn.micros[...]
[30]
문서
Clang-Tidy — Extra Clang Tools git documentation
https://clang.llvm.o[...]
[31]
문서
PhpMetrics, static analysis for PHP - by Jean-François Lépine
https://www.phpmetri[...]
[32]
문서
Find and fix problems in your JavaScript code - ESLint - Pluggable JavaScript Linter
https://eslint.org/
[33]
저널인용
Industrial Perspective on Static Analysis.
http://www.ida.liu.s[...]
1995-03
[34]
문서
"Software Quality Objectives for Source Code"
http://web1.see.asso[...]
[35]
문서
Improving Software Security with Precise Static and Runtime Analysis
http://research.micr[...]
[36]
웹인용
Automated Defect Prevention for Embedded Software Quality
http://alm.parasoft.[...]
VDC Research
2012-04-10
[37]
논문
Prause, Christian R., René Reiners, and Silviya Dencheva
[38]
논문
M. Howard and S. Lipner
[39]
논문
Achim D. Brucker and Uwe Sodan
[40]
웹사이트
http://www.omg.org/C[...]
[41]
웹인용
A Survey of Automated Techniques for Formal Software Verification
http://www.kroening.[...]
Transactions On CAD
2015-05-11
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com